package Dominio;

import java.util.ArrayList;

import Persistencia.Pers_Fachada;
import Persistencia.PersistenciaException;

class Gestor_Apuestas {

	public void apostar(ApuestaUsuarioData apuesta) throws DominioException {
		PerfilData cliente = apuesta.get_user();
		if (cliente.get_usuario().get_saldo() < apuesta.get_cantidad()) {
			throw new DominioException();
		} else {
			float saldo_antiguo = cliente.get_usuario().get_saldo();
			try {
				cliente.get_usuario().set_saldo(
						saldo_antiguo - apuesta.get_cantidad());
				new Pers_Fachada().updateUser(cliente);
				try {
					new Pers_Fachada().createUserBet(apuesta);
				} catch (PersistenciaException e1) {
					cliente.get_usuario().set_saldo(saldo_antiguo);
					new Pers_Fachada().updateUser(cliente);
					throw new DominioException();
				}
			} catch (PersistenciaException e) {
				throw new DominioException();
			}
		}
	}

	public void createApuesta(ApuestaData apuesta) throws DominioException {
		try {
			new Pers_Fachada().createBet(apuesta);
		} catch (PersistenciaException e) {
			throw new DominioException();
		}
	}

	public void updateApuesta(ApuestaData apuesta) throws DominioException {
		try {
			new Pers_Fachada().updateBet(apuesta);
		} catch (PersistenciaException e) {
			throw new DominioException();
		}
	}

	public void deleteApuesta(ApuestaData apuesta) throws DominioException {
		try {
			new Pers_Fachada().deleteBet(apuesta);
		} catch (PersistenciaException e) {
			throw new DominioException();
		}
	}

	public ArrayList<ApuestaData> getApuesta(int id) throws DominioException {
		ArrayList<ApuestaData> apuestas = new ArrayList<ApuestaData>();
		try {
			if (id == 0) {
				apuestas = new Pers_Fachada().readAllBet();
			} else {
				apuestas.add(new Pers_Fachada().readBet(id));
			}
		} catch (PersistenciaException e) {
			throw new DominioException();
		}
		return apuestas;
	}

	public ArrayList<ApuestaUsuarioData> apuestasUsuario(PerfilData user,
			int filtro) throws DominioException {
		try {
			return new Pers_Fachada().readUserBet(user, filtro);
		} catch (PersistenciaException e) {
			throw new DominioException();
		}
	}

}
